﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<functional>

using namespace std;


int f(int a, int b)
{
	return a + b;
}
struct Functor
{
public:
	int operator() (int a, int b)
	{
		return a + b;
	}
};



//class Plus
//{
//public:
//	Plus(int n = 10)
//		:_n(n)
//	{
//	}
//	static int plusi(int a, int b)
//	{
//		return a + b;
//	}
//	double plusd(double a, double b)
//	{
//		return (a + b) * _n;
//	}
//
//private:
//	int _n;
//};//
//
//int main()
//{
//
//
//
//	function<double(Plus&&, double, double)> f7 = &Plus::plusd;
//	Plus pd;
//	cout << f7(move(pd), 1.1, 1.1) << endl;
//	cout << f7(Plus(), 1.1, 1.1) << endl;////////
//	//function<double(Plus, double, double)> f6 = &Plus::plusd;
//
//	//cout << f6(pd, 1.1, 1.1) << endl;
//	//cout << f6(pd, 1.1, 1.1) << endl;
//	//	// 包装普通成员函数 
//	//// 普通成员函数还有⼀个隐含的this指针参数，所以绑定时传对象或者对象的指针过去都可以 
//	//function<double(Plus*, double, double)> f5 = &Plus::plusd;
//	//
//	//cout << f5(&pd, 1.1, 1.1) << endl;
//
//	//// 包装静态成员函数 
//	//// 成员函数要指定类域并且前⾯加&才能获取地址 
//	//function<int(int, int)> f4 = &Plus::plusi;//	//cout << f4(5, 5) << endl;//
//
//	return 0;
//}

using placeholders::_1;
using placeholders::_2;
using placeholders::_3;

int Sub(int a, int b)
{
	return (a - b) * 10;
}
int main()
{
	auto sub1 = bind(Sub, _1, _2);
	cout << sub1(10, 5) << endl;

	return 0;
}

//int main()
//{
//	//包装各种可调⽤对象
//	//包装函数对象->函数指针
//	function<int(int, int)> f1 = f;
//	//包装仿函数对象
//	function<int(int, int)> f2 = Functor();
//	//包装lambda表达式对象
//	function<int(int, int)> f3 = [](int a , int b) {return a + b; };
//
//
//	// 包装静态成员函数 
//    // 成员函数要指定类域并且前⾯加&才能获取地址 
//	function<int(int, int)> f4 = &Plus::plusi;
//	cout << f4(1, 1) << endl;
//
//
//	// 包装普通成员函数 
//    // 普通成员函数还有⼀个隐含的this指针参数，所以绑定时传对象或者对象的指针过去都可以 
//	function<double(Plus*, double, double)> f5 = &Plus::plusd;
//	Plus pd;
//	cout << f5(&pd, 1.1, 1.1) << endl;//	 
//
//
//	return 0;
//}
//#include<vector>
//int main()
//{
//	switch (switch_on)
//	{
//	case 1:
//
//	default:
//		break;
//	}
//	int a;
//	cin >> a;
//	vector<int> sl;
//	for (int i = 0; i < a; i++)
//	{
//		sl.push_back(a);
//	}
//	int b;
//	cin >> b;
//	auto it = find(sl.begin(), sl.end(), 4);
//}

//#include<stdio.h>
//int main() {
//	float a;
//	float b;
//	char g;
//	float add;
//	scanf("%f%c%f", &a,&g, &b);
//	if (g == '+')
//	{
//		add = a + b;
//		printf("%.4f%c%.4f=%.4f", a, g, b, add);
//	}
//
//	return 0;
//}
//
